package mm.back.filtros;

import org.hibernate.Query;

public class VendedoresFiltro implements HibernateHQLFilter {
	
	private String nombre;
	private String apellido;
	

	private Long numero;
	
	private Boolean activo;

	/**
	 * @return the apellido
	 */
	public String getApellido() {
		return apellido;
	}
	
	/**
	 * @param apellido the apellido to set
	 */
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}
	
	/**
	 * @return the nombre
	 */
	public String getNombre() {
		return nombre;
	}

	/**
	 * @param nombre the nombre to set
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	/**
	 * @return the numero
	 */
	public Long getNumero() {
		return numero;
	}

	/**
	 * @param numero the numero to set
	 */
	public void setNumero(Long numero) {
		this.numero = numero;
	}

	/**
	 * @return the activo
	 */
	public Boolean getActivo() {
		return activo;
	}

	/**
	 * @param activo the activo to set
	 */
	public void setActivo(Boolean activo) {
		this.activo = activo;
	}

	/**
	 * @see HibernateHQLFilter#getWhereClause(String...)
	 */
	public String getWhereClause(String... alias) {
		String ALIAS_VENDEDOR = alias[0] + ".";
		String AND = " AND ";
		StringBuffer sb = new StringBuffer();
		
		if (getActivo() != null){
			sb.append(AND).append(ALIAS_VENDEDOR).append("activo = :activo ");
		}
		
		if (getNombre() != null && !"".equals(getNombre())){
			sb.append(AND).append("lower(").append(ALIAS_VENDEDOR).append("nombre) like :nombre ");
		}
		
		if (getApellido() != null && !"".equals(getApellido())){
			sb.append(AND).append("lower(").append(ALIAS_VENDEDOR).append("apellido) like :apellido ");
		}
		
		if (getNumero() != null && 0 < getNumero()){
			sb.append(AND).append(ALIAS_VENDEDOR).append("id = :numero ");
		}
		
		return sb.toString();
	}
	
	/**
	 * @see HibernateHQLFilter#setWhereParameters(Query)
	 */
	public void setWhereParameters(Query query) {
		
		if (getActivo() != null){
			query.setBoolean("activo", getActivo());
		}
		if (getNombre() != null && !"".equals(getNombre())){
			query.setString("nombre", "%"+getNombre().toLowerCase()+"%");
		}
		if (getApellido() != null && !"".equals(getApellido())){
			query.setString("apellido", "%"+getApellido().toLowerCase()+"%");
		}
		if (getNumero() != null && 0 < getNumero()){
			query.setLong("numero", getNumero());
		}
		
	}



}
